package com.hspedu.final_;

public class FinalDetail01 {
    public static void main(String[] args) {
        System.out.println(CC.num);
    }
}


class AA {
    /*
    定义final属性(常量)赋初值
    1.定义时，如：public final double TAX_RATE = 0.08;
    2.在构造器中
    3.在代码块中
     */
    public final double TAX_RATE = 0.08;//1.定义时
    public final double TAX_RATE2;//2.在构造器中
    public final double TAX_RATE3;//3.在代码块中

    public AA() {
        TAX_RATE2 = 1.1;
    }

    {
        TAX_RATE3 = 8.8;
    }
}

class BB {
    /*
    如果final修饰的属性是静态的，则初始化的位置只能是
    1.定义时
    2.静态代码块
     */
    public static final double TAX_RATE = 99.9;//1.定义时
    public static final double TAX_RATE2;

    static {
        TAX_RATE2 = 3.3;
    }
}

//final 和 static 往往搭配使用，效率更高，不会导致类加载
class CC {
    public final static int num = 100;

    static {
        System.out.println("CC 静态代码块被执行");
    }
}